\documentclass[11pt, a4paper]{report}

\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage[pdftex]{graphicx}
\usepackage{fancyhdr}
\usepackage{array}
\usepackage{url}
\usepackage{a4wide}
\usepackage{caption}
\usepackage{color}
\usepackage{listings}
\usepackage{pdfpages}
\usepackage[pdftex,bookmarks=true]{hyperref}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}

\definecolor{gray80}{gray}{.8}
\lstdefinestyle{consola}
        {
         basicstyle=\scriptsize\bf\ttfamily,
         backgroundcolor=\color{gray80},
         frame=Ltb,
         framerule=0pt,
         aboveskip=0.5cm,
         framextopmargin=3pt,
     framexbottommargin=3pt,
%      framexleftmargin=0.4cm,
     framesep=0pt,
     rulesep=.4pt,
     rulesepcolor=\color{black},
     tabsize=2
}

\renewcommand{\captionfont}{\footnotesize}
\renewcommand{\captionlabelfont}{\bfseries}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\renewcommand*\familydefault{\sfdefault}


\usepackage{color}
\usepackage{listings}

\definecolor{gray}{gray}{0.5}
\definecolor{green}{rgb}{0,0.5,0}


\newcommand{\imgdir}{./img}
\graphicspath{{\imgdir/}}

\newcommand{\cod}[1]{\texttt{\bfseries #1}}
\newcommand{\n}{\texttt{\ensuremath{\backslash}n}}
\newcommand{\0}{\texttt{\ensuremath{\backslash}0}}

\def\thesection{\arabic{section}}

%parámetros para fbox
\setlength\fboxsep{15pt}
\setlength\fboxrule{0.5pt}

\title{66.20 Organización de computadoras}
\author{Verónica Bukaczewski \and Ariel George}
\date{\today}


\begin{document}
\include{caratula}

%Cabeceras y pies de página
\pagestyle{fancy}
\lhead{}
%\lhead{\fancyplain{}{Organizaci\'on de computadoras 66.20 - Turno Jueves}}
\chead{}
%\rhead{\fancyplain{}{Trabajo Pr\'actico 0}}
\rhead{}
\lfoot{\scriptsize{66.20 Organización de computadoras - Turno jueves\\Trabajo
práctico 0 - 1er cuatrimestre 2011\\Verónica Bukaczewski(86954), Ariel George
(88024)}}
\cfoot{}
\rfoot{\\\thepage}
\renewcommand{\headrulewidth}{0pt}

\setcounter{page}{2}

\newpage
\thispagestyle{empty}
\tableofcontents

\newpage
\section{Introducci\'on}
  En el presente trabajo pr\'actico se busc\'o familiarizarse con las
  herramientas de software que se usar\'an en los siguientes trabajos
  pr\'acticos. Estas herramientas son el programa \cod{GXemul}, para simular el
  entorno de desarrollo, y una m\'aquina \cod{MIPS}, corriendo una versi\'on del
  sistema operativo NetBSD. Para ello, se escribi\'o un programa en lenguaje
  \cod{C} que muestra las diferencias entre dos archivos de texto; es una
  versi\'on minimalista del comando diff.

\section{Resoluci\'on del problema}
  \subsection{Funcion \cod{parser}}
  Esta funci\'on se encarga de obtener las opciones de ejecuci\'on del programa utilizando la funcion \cod{getopt} y, en base a eso, realizar una corrida del programa.
  \newline
  Para la captura de los par\'ametros opcionales que pueden utilizarse al 
  llamar el programa, se decidi\'o utilizar la funci\'on \cod{getopt\_long} que
  trabaja como \cod{getopt} salvo que tambi\'en acepta opciones largas, que empiezan por dos guiones. Esta decisi\'on se tom\'o con el fin de simplificar el c\'odigo necesario para la resoluci\'on del parseo de los
  argumentos; dado que, de este modo, se evita generar c\'odigo que tenga en cuenta todas las combinaciones posibles de los mismos. As\'i como
  tambi\'en, para que pueda ser extensible; es decir, pueda expandirse f\'acilmente el programa en caso de desear agregar par\'ametros para
  ejecutar el mismo.
  
  \subsection{Análisis de los archivos}
  \input{process}

\section{Preparando el ambiente para NetBSD}
  Para probar el trabajo pr\'actico, lo primero que se debe realizar es enviar
  el c\'odigo fuente al entorno del NetBSD. Se considera que el NetBSD se
  encuentra corriendo y que se ha creado el loopback necesario. Para ello, se
  deben realizar los siguientes pasos desde una terminal\footnote{Se sigue la
  misma convención que la cátedra para los prompts.}:
  \begin{enumerate}
%   \item Abrir una consola e ingresar en modo root.
   \item Ingresar al directorio del usuario gxemul y copiar allí el directorio
   \cod{tp0} del cd. 
\begin{lstlisting}[style=consola]
 hostOS$ cd /home/gxemul
 hostOS$ cp -r /unidad_de_cd/tp0 .
\end{lstlisting}

   \item Copiar el directorio \cod{tp0} del usuario gxemul al directorio root
   en el NetBSD.
\begin{lstlisting}[style=consola]
 hostOS$ scp -r -P2222 tp0/ root@127.0.0.1:/root
\end{lstlisting}

	Se solicitará la contraseña del usuario root en el NetBSD (``orga6620'').
  \end{enumerate}
  
  Finalizados estos pasos, se cuenta con todos los archivos necesarios para
  compilar y ejecutar el programa en el NetBSD.

\section{Compilando en NetBSD}
	Para compilar y ejecutar el programa en NetBSD loguearse a la máquina virtual
	mediante ssh ejecutando el siguiente comando
\begin{lstlisting}[style=consola]
 hostOS$ ssh -p 2222 root@127.0.0.1
\end{lstlisting}

Luego ingresar al directorio donde se copiaron los archivos (\cod{/root/tp0} si
se siguieron los ejemplos).

\begin{lstlisting}[style=consola]
 guestOS# cd /root/tp0
\end{lstlisting}
	
  \subsection{Generando c\'odigo binario}
    Para compilar el ejecutable, tanto desde el NetBSD como desde el sistema
    operativo host, simplemente ejecutar \cod{make} desde el directorio con el
    código fuente.
    
  \subsection{Generando c\'odigo assembly}
  Para detener el proceso justo después de la compilación y antes del
  ensamblado, generando archivos con el código assembly, se debe ejecutar
\begin{lstlisting}[style=consola]
 guestOS# make asm
\end{lstlisting} 
    
    Si se ejecuta este comando en el sistema operativo host se producirá un
    error ya que se usan flags de \cod{gcc} específicas de la arquitectura
    MIPS.

\section{Ejecutando los programas en NetBSD}
  Para ejecutar el programa, el comando a utilizar es:
\begin{lstlisting}[style=consola]
 $ ./tp0 [opciones] from-file to-file
\end{lstlisting}
 
  Opciones:
    \begin{description}
     \item [\cod{-v}, \cod{-}\cod{-version}] imprime la versi\'on y finaliza
     \item [\cod{-h}, \cod{-}\cod{-help}]     imprime la informaci\'on del
     comando y finaliza
     \item [\cod{-o}, \cod{-}\cod{-output}]   especifica el archivo de salida
     \item [\cod{-m}, \cod{-}\cod{-max}]      especifica el máximo de
     diferencias a mostrar
    \end{description}

\section{Casos de prueba}
  En las siguientes secciones se detallar\'an los distintos archivos utilizados
  para probar el funcionamiento del programa. Estos archivos están disponibles
  en el directorio \cod{test-data} junto con el código fuente.

  \subsection{Distintas formas de invocaci\'on}
    Para ejemplificar las diferentes formas de invocación se usaron los
    archivos \cod{simple} y \cod{simpleb}, que sólo difieren en algunos pocos
    caracteres, pero permiten mostrar los diferentes métodos de invocación.
    
    El contenido de los archivos es
    \begin{center}
	\begin{tabular}{l | l}
	\cod{aaaaaa} & \cod{aabbab} \\
	\cod{aaaaaa} & \cod{abaaba} \\
	\end{tabular}
	\end{center}
por lo que se ve las diferencias son en la línea 0 las columnas 2, 3 y 5; y en
la línea 1 las columnas 1 y 4.

Si ejecutamos el programa sin opciones, mostrará todas las diferencias, como se
ve en la figura \ref{fig:simple1}.

\begin{figure}[!ht]
\centering
	\includegraphics[width=\textwidth]{completo}
	\caption{Salida del programa ejecutado sin opciones sobre los archivos \cod{simple}
	y \cod{simpleb}.}
	\label{fig:simple1}
\end{figure}

Si ejecutamos el programa con la opción \cod{-m2} mostrará únicamente las
primeras dos diferencias (figura \ref{fig:max2}) y con la opción \cod{-m4}
mostrará las primeras cuatro diferencias (figura \ref{fig:max4}).

\begin{figure}[!ht]
\centering
	\includegraphics[width=\textwidth]{m2}
	\caption{Salida del programa ejecutado sobre los archivos \cod{simple}
	y \cod{simpleb} mostrando las primeras dos diferencias.}
	\label{fig:max2}
\end{figure} 

\begin{figure}[!ht]
\centering
	\includegraphics[width=\textwidth]{m4}
	\caption{Salida del programa ejecutado sobre los archivos \cod{simple}
	y \cod{simpleb} mostrando las primeras cuatro diferencias.}
	\label{fig:max4}
\end{figure}

Si se especifica la opción \cod{-m7} deberían mostrarse las primeras siete
diferencias, pero sólo hay cinco diferencias, por lo que la salida es igual que
la de la ejecución sin opciones (figura \ref{fig:max7}).

\begin{figure}[!ht]
\centering
	\includegraphics[width=\textwidth]{m7}
	\caption{Salida del programa ejecutado sobre los archivos \cod{simple}
	y \cod{simpleb} para mostrar las primeras siete diferencias. Como sólo hay
	cinco diferencias se muestran todas.}
	\label{fig:max7}
\end{figure}

Finalmente en la figura \ref{fig:output} se muestra el comportamiento del
programa con la opción \cod{output} especificando un archivo de salida donde
imprimir los resultados (no se imprime por la salida estándar).

\begin{figure}[!ht]
\centering
	\includegraphics[width=\textwidth]{output}
	\caption{Corrida del programa sobre los archivos \cod{simple}
	y \cod{simpleb} imprimiendo la salida en el archivo especificado en
	lugar de la salida estándar.}
	\label{fig:output}
\end{figure}



  \subsection{Distintos archivos de prueba}
  A continuación se describen los archivos de prueba utilizados y se muestran
  las corridas del programa para cada uno de estos pares de archivos.
    \subsubsection{Prueba 1}
    Corresponde a los archivos \cod{1} y \cod{1b} proporcionados por la
    cátedra. La corrida de esta prueba se muestra en la figura \ref{fig:caso1}.
    
    \begin{figure}[!ht]
    \centering
    	\includegraphics[width=\textwidth]{caso01}
    	\caption{Corrida del programa con los archivos de prueba \cod{1} y
    	\cod{1b}}
    	\label{fig:caso1}
    \end{figure}

    \subsubsection{Prueba 2}
    Corresponde a los archivos \cod{2} y \cod{2b} proporcionados por la
    cátedra. La corrida de esta prueba se muestra en la figura \ref{fig:caso2}.
    
    \begin{figure}[!ht]
    \centering
    	\includegraphics[width=\textwidth]{caso02}
    	\caption{Corrida del programa con los archivos de prueba \cod{2} y \cod{2b}}
    	\label{fig:caso2}
    \end{figure}

    \subsubsection{Prueba 3}
    Los archivos \cod{3} y \cod{3b} son variaciones de los archivos \cod{1} y
    \cod{1b}. Se modificó uno de los archivos de modo que en la línea 0
    difieran además en las primeras columnas. La corrida de esta prueba se
    muestra en la figura \ref{fig:caso3}.
    
    \begin{figure}[!ht]
    \centering
    	\includegraphics[width=\textwidth]{caso03}
    	\caption{Corrida del programa con los archivos de prueba \cod{3} y
    	\cod{3b}.}
    	\label{fig:caso3}
    \end{figure}

    \subsubsection{Prueba 4}
    Los archivos \cod{4} y \cod{4b} son variaciones de los archivos \cod{1} y
    \cod{1b}, con caracteres agregados en algunas líneas. Permite probar el
    caso de líneas de diferente longitud. La corrida de esta prueba se muestra
    en la figura \ref{fig:caso4}.
    
    \begin{figure}[!ht]
    \centering
    	\includegraphics[width=\textwidth]{caso04}
    	\caption{Corrida del programa con los archivos de prueba \cod{4} y
    	\cod{4b}. Prueba el comportamiento frente a líneas de diferente
    	longitud.}
    	\label{fig:caso4}
    \end{figure}

    \subsubsection{Prueba 5}
    Los archivos \cod{5} y \cod{5b} son iguales excepto por una línea, que
    comienza diferente pero termina igual. La corrida de esta prueba se muestra
    en la figura \ref{fig:caso5}.
    
    \begin{figure}[!ht]
    \centering
    	\includegraphics[width=\textwidth]{caso05}
    	\caption{Corrida del programa con los archivos de prueba \cod{5} y
    	\cod{5b}.}
    	\label{fig:caso5}
    \end{figure}

    \subsubsection{Prueba 6}
    Los archivos \cod{6} y \cod{6b} permiten probar el comportamiento del
    programa frente a archivos de diferente longitud. Uno de los archivos es
    más largo que el otro (algunas de las líneas extra están vacías y otras
    llenas). La corrida de esta prueba se muestra en la figura \ref{fig:caso6}.
    
    \begin{figure}[!ht]
    \centering
    	\includegraphics[width=\textwidth]{caso06}
    	\caption{Corrida del programa con los archivos de prueba \cod{6} y
    	\cod{6b}. Prueba el comportamiento frente a archivos de diferente
    	longitud.}
    	\label{fig:caso6}
    \end{figure}

\newpage
\section{Conclusiones}
     En el presente trabajo pr\'actico aprendimos cómo utilizar las
     herramientas necesarias para realizar los futuros trabajos pr\'acticos.
     Aprendimos a instalar, conectarnos, crear el t\'unel y subir y bajar
     archivos del \cod{GXemul}. Nos encontramos con los problemas que
     podr\'ian hab\'ersenos presentado al intentar resolver los siguientes
     trabajos y consideramos que esto fue algo importante y formativo dado que
     pudimos encontrar la soluci\'on a estas dificultades, de modo de que al
     realizar los siguientes trabajos, poder concentrarnos en la resoluci\'on
     de los mismos y no en el c\'omo utilizar las herramientas con las que
     contamos para hacerlo.
     


%APENDICES
\appendix
\newpage
\chapter*{Enunciado}
\addcontentsline{toc}{section}{Enunciado}
\includepdf[pages=1-3, scale=0.9, pagecommand={\thispagestyle{plain}}]{../TP0-1C-2011.pdf}

\end{document}
